# 导入基础库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 导入机器学习库
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.tree import plot_tree

# 关键：设置中文字体（4种字体选1个即可，优先试前2个）
plt.rcParams['font.sans-serif'] = ['SimHei', 'WenQuanYi Zen Hei', 'Microsoft YaHei', 'DejaVu Sans']
# 解决负号显示异常（可选，部分场景需要）
plt.rcParams['axes.unicode_minus'] = False


# region 步骤 1：准备环境与加载数据
# 加载数据集
# 手动指定数据集本地路径（替换为你的文件实际保存路径）
housing = fetch_california_housing(
    data_home="C:/Users/Administrator/Downloads/scikit-learn-data/",  # 数据集存放的文件夹（不含文件名）
    # download_if_missing=False  # 已手动下载，不重复下载
)
# 转换为DataFrame便于分析（特征+目标变量）
df = pd.DataFrame(housing.data, columns=housing.feature_names)
df["MedHouseVal"] = housing.target  # 添加目标变量（房价中位数）
# endregion

# region 数据探索（理解数据分布）
# 查看数据基本信息
print("数据集形状：", df.shape)  # (20640, 9) 20640个样本，8个特征+1个目标
print("\n前5行数据：")
print(df.head())

# 查看特征与目标变量的相关性
plt.figure(figsize=(10, 6))
corr = df.corr()
sns.heatmap(corr, annot=True, cmap="coolwarm", fmt=".2f")
plt.title("特征相关性热力图")
plt.show()

# 核心特征（收入中位数）与房价的散点图
plt.figure(figsize=(8, 5))
sns.scatterplot(x="MedInc", y="MedHouseVal", data=df, alpha=0.5)
plt.title("收入中位数与房价中位数的关系")
plt.xlabel("收入中位数（万美元）")
plt.ylabel("房价中位数（十万美元）")
plt.show()
# endregion